Csit.Delta.Client.ExcelReports.D8ExcelReport
D8-ExcelReports¶
Плагин для D8-Monitor
, в котором реализованы функции построения стандартных для системы Дельта отчетов в формате xlsx-документов.
Реализует интерфейсы ID8Report
и ID8Localization
. Использует библиотеку EPPlus
для работы с документами xlsx (открытый формат документов для представления электронных таблиц).
Принцип работы плагина¶
Плагин генерирует xlsx-отчеты, на основании макетов отчетов.
Макет - это xlsx-документ, содержащий страницу определенного формата, определяющие, какие поля ввода нужно заполнить, какие действия нужно выполнить для построения отчета, все необходимые настройки, зарание размеченные и отформатированные страницы, в которые будут выведены данные.
Построение отчета из макета разделяется на зарание установленное количество шагов. Каждый шаг представляет собой набор настроек, описания полей ввода информации и список действий, которые будут выполнены после заполнения полей ввода. Процесс выполнения шага может повлиять на настройки и поведение следующего шага. Построение отчета заканчивается, когда последний шаг успешно завершается. Отчет может содержать неинтерактивные шаги (лишенные полей ввода) - такие шаги не отображаются в пользовательском интерфейсе.
Каждые отчет может содержать специальные переменные. Их имена должны начинаться с символа #. Переменные отчета представляются собой экземпляры класса DataTable
и могут использовать для передачи данных внутри отчета и между отчетом и хост-приложением.
Структура макета¶
Макет может содержать специальные листы с названием: Report
, Step1
, Step2
, ..., StepN
, Timings
, Localization - XX
.
Обязательным является только лист Step1
, все остальные - опциональные. Специальные страницы разделяются (могут разделяться) на секции и блоки. Секция - это набор блоков. Блок может описывать поле ввода информации, структуру с настройками или действие.
Кроме специальных листов макет может содержать произвольное количество листов, в которые будут выводиться данные либо которые не будут использоваться плагином.
Лист Report
¶
Содержит настройки и информацию, относящиеся ко всему макету и к окружению во время построения отчета. Лист должен содержать секцию Settings
, в которой могут быть необходимые блоки.
Листы StepN
¶
Описывают шаги построения отчета. Step1
описывает первый шаг, Step2
- второй, и так далее. Таких листов может быть произвольное количество, но как минимум один.
Каждый лист Step
может содержать следующие секции:
-
Settings
- содержащую блоки с настройками, относящимся к данному шагу отчета; -
Arguments
- содержащую блоки, описывающие поля для ввода информации, отображаемые на данном шаге построения отчета; -
Commands
- содержащую блоки, описывающие действия, которые должны быть выполнены на данном шаге отчета после ввода данных в поля ввода, описанные в секцииArguments
.
Лист Timings
¶
Описывает тайминги отчета - формулы задания временного интервала и шага по времени.
На листе Timings
должна быть секция с таким же именем Timings
. В ней размещается таблица, каждая строка которой описывает один вариант (один тайминг) задания временного интервала и шага.
Кроме того в строке содержатся настройки для отображения элементов управления, которые будут использоваться в пользовательском интерфейсе при запросе ввода временного интервала и шага.
Столбцы таблицы:
-
Name
Наименование тайминга.
-
NEdit
Подпись элемента управления для ввода количества временных шагов (N
) смещения. Если не указана, то элемент управления не отображается.
-
NLimit
Ограничения на значенияN
, которые могут быть введены. Указывается или одно число - минимально допустимое значение, или пара чисел через минус - минимально допустимое и максимально допустимое значения.
Например:1-100
. Опционально.
-
T1Edit
Подпись элемента управления для ввода начального момента времени (T1
). Если не указана, то элемент управления не отображается. Если равняется единственному символу подчеркивания (_
), то элемент управления выводится без подписи.
-
T1EditFlags
Настройки для элемента управления ввода начального момента времени.
-
T1Shift
Cдвиг начального момента времени. Указывает в форматеTimeSpan
илиD8TimeInterval
.
Например:00:01:30
или25m
. Опционально.
-
T1NCoef
Величина одного шага смещенияT1
. Вводится в форматеTimeSpan
. Например:-00:01:00
. Указывается совместно сNEdit
.
-
T1Schedule
Строка расписания для определенияT1
.
-
T1ScheduleRankShift
Ранг для поиска в расписанииT1
(см. описание строки определения тайминга).
-
T1ScheduleRankNCoef
Коэффициент смещения ранга для поиска расписанияT1
. Ранг будет добавлено произведение величиныN
на этот коэффициент.
-
T1Limit
Ограничения на значения начального момента времени, которые могут быть введены.
Указывается или одна дата - минимально допустимое значение, или пара дат через минус - минимально допустимое и максимально допустимое значения.
Даты указываются в форматеyyyy.MM.dd
.
Опционально.
-
T2Edit
Подпись элемента управления для ввода конечного момента времени (T2
). Если не указана, то элемент управления не отображается.
-
T2EditFlags
Настройки для элемента управления ввода конечного момента времени. Формат значения аналогиченT1EditFlags
.
-
T2Shift
Cдвиг конечного момента времени. Формат значения аналогиченT1Shift
.
-
T2NCoef – шаг для расчета конца интервала
Величина одного шага смещенияT1
. Формат аналогиченT1NCoef
. Указывается совместно сNEdit
.
-
T2Schedule
Строка расписания для определенияT2
.
-
T2ScheduleRankShift
Ранг для поиска в расписанииT2
.
-
T2ScheduleRankNCoef
Коэффициент смещения ранга для поиска расписанияT2
. Ранг будет добавлено произведение величиныN
на этот коэффициент.
-
T2Limit
Ограничения на значения конечного момента времени, которые могут быть введены. Формат аналогиченT1Limit
.
-
T2IsT1Relative
true
, еслиT2
вычисляется относительноT1
. ИначеT2
вычисляется относительно текущего времени.
-
StepEdit
Подпись элемента управления для ввода величины шага по времени. Если не указана, то элемент управления не отображается.
-
StepMode
Способ ввода пользователем значения шага:Timespan
- пользователь вводит произвольное значение временного интервалаFixedList
- пользователь выбирает пункт из фиксированного списка вариантовValueAndUnits
- пользователь вводит величину интервала и еденицы времениРежим задания вариантов шага в
StepList
:Timespan
- указывается одно значение в форматеTimeSpan
(напр,01:00:00
)FixedList
- указывается список вариантов в форматеTimeSpan
, разделенных символом/
ValueAndUnits
-
StepList
Варианты шага для случаяStepMode=FixedList
.
Указывается список вариантов через запятую. Каждый вариант - это величина в форматеTimeSpan
илиD8TimeInterval
, символ/
и подись для этого варианта.
Например:1s/секунд,1m/минут,1h/часов
.
-
StepLimit
Ограничения на значения шага, которые могут быть введены.
Указывается или одно значениеTimeSpan
- минимально допустимое значение, или пара значений через минус - минимально допустимое и максимально допустимое значения.
Опционально.
ShowMillisecond
ShowSecond
ShowMinute
ShowHour
ShowWeekDay
ShowDay
ShowMonth
ShowQuarter
ShowYear
ShowTime = ShowSecond | ShowMinute | ShowHour
ShowTimeMs = ShowMillisecond | ShowSecond | ShowMinute | ShowHour
ShowDate = ShowDay | ShowMonth | ShowYear
ShowDateTime = ShowDate | ShowTime
ShowDateTimeMs = ShowDate | ShowTimeMs
EditMillisecond
EditSecond
EditMinute
EditHour
EditWeekDay
EditDay
EditMonth
EditQuarter
EditYear
EditTime
EditTimeMs
EditDate
EditDateTime
EditDateTimeMs
Millisecond = ShowMillisecond | EditMillisecond
Second = ShowSecond | EditSecond
Minute = ShowMinute | EditMinute
Hour = ShowHour | EditHour
WeekDay = ShowWeekDay | EditWeekDay
Day = ShowDay | EditDay
Month = ShowMonth | EditMonth
Quarter = ShowQuarter | EditQuarter
Year = ShowYear | EditYear
Time = ShowTime | EditTime
TimeMs = ShowTimeMs | EditTimeMs
Date = ShowDate | EditDate
DateTime = ShowDateTime | EditDateTime
DateTimeMs = ShowDateTimeMs | EditDateTimeMs
Листы Localization - XX
¶
Содержат словарь для перевода терминов, используемых в плагине (и в его хост-приложении), на читаемый язык. XX - это идентификатор локализации, например ru, или любой произвольный идентификатор. Словарь разделяется на секции.
Структура блоков листов Report
и Step
¶
Каждый блок - это прямоугольный регион ячеек excel. Блоки разделяются пустой строкой.
Левая верхняя ячейка - это тип блока. В коде задается атрибутом D8ReportCommand
и соответствует классу .NET.
Во втором столбце содержится название свойства блока (может содержать точки как разделители подклассов).
В третьем столбце содержится значение для свойства. Если значение - это массив, то его значение будет занимать ячейки начиная с третьего столбца и правее вплоть до первой пустой ячейки.
Например:
ParamTable | Caption | НСИ | Value.ParamSids | TEST.1 | TEST.2 | | Value.ParamDbFields | SID | LocalName | GroupName | MinParamCount | 1 | MinFieldCount | 1 | MaxFieldCount | 20
Значения свойства блока могут передаваться из отчета в код палгина, из кода в отчет или туда и обратно.
Свойства, начинающиеся на Value.
считаются результатом обработки блока.
Блоки по назначению подразделяются на блоки-настройки, блоки-аргументы и блоки-команды.
Блоки-настройки (блоки Settings
)¶
Классы, наследованные от SettingsBlockBase
, опционально IBlockInit
.
Блоки-настройки содержаться в секции Settings
листа Report
или StepN
и представляют структуры данных для передачи настроек и информации о контексте выполнения из макета в код или из кода в отчет.
ReportSettings
¶
Содержит настройки для всего отчета. Такой блок должен располагаться на листе Report
и может быть только один.
Свойства блока:
ResultFilename [ValueIsFormula]
Имя или путь файла отчета. Путь может быть относительным. В таком случае он задается относительно пути выходной папки, задаваемой хост-приложением.
BreakOnWarningInSummary (false/true)
Еслиtrue
, то построение отчета прерывается при первом предупреждении, записанном в сводку выполнения отчета.
BreakOnErrorInSummary (false/true)
Еслиtrue
, то построение отчета прерывается при первой ошибке, записанной в сводку выполнения отчета.
SupportedFormat
Список форматов, поддерживаемых данным макетом отчета. Может быть одним значением или комбинацией значений. Варианты:Excel
- отчет генерируется в виде xlsx-документа. Это значение по умолчанию.Table
- отчет генерирует таблицу с данными, которую может отобразить хост-приложение.Slide
- мнемосхема, которую может отобразить хост-приложение.
ReportContext
¶
Содержит информацию о контексте выполнения отчета. Почти все свойства этого блока предназначены для чтения другими блоками. Значения для этих свойств записываются в начальный момент выполнения отчета и не могут быть заданы заранее в макете. Исключения составляют свойства Timezone
и LocalizationId
.
Свойства блока:
Timezone [OutputToWorksheet]
Часовой пояс, используемый при построении отчета.
В это свойства записывается строка с описанием часового пояса, выбранного пользователем. См. [ Строка определения временной зоны ]
Если значение этого свойства указано в макете, то оно не изменяется при построении отчета. Таким образом часовой пояс может быть задан на уровне хост-приложения, либо на уровне макета.
Timezone_UtcBias [OutputToWorksheet]
Сдвиг часового поясаTimezone
относительно UTC в часах.
LocalizationId [OutputToWorksheet]
Идентификатор культуры, используемый для локализации отчета.
В это свойства записывается строка с описанием культуры, выбранной пользователем.
Если значение этого свойства указано в макете, то оно не изменяется при построении отчета.
Timestamp [OutputToWorksheet]
Время построения отчета (локальное).
PrincipalName [OutputToWorksheet]
Наименование учетной записи, из-под которой запущен процесс построения отчета.
PrincipalCategory [OutputToWorksheet]
Категория учетной записиPrincipflName
.
WinUserName [OutputToWorksheet]
Имя учетной записи пользователя Windows, из-под которой запущен процесс построения отчета.
WinUserDomainName [OutputToWorksheet]
Домен пользователяWinUserName
.
WinMachineName [OutputToWorksheet]
Имя компьютера, на котором запущен процесс построения отчета.
CurrentFormat [OutputToWorksheet]
Формат отчета, выбранный для построения отчета:Excel
Table
Slide
StepSettings
¶
Блок с настройками обработки шага построения отчета. Такой блок может быть только один, и может быть указан только на листе StepN
.
Свойства:
Caption
Заголовок шага.
OptionalStep (false/true)
Если значениеtrue
, то шаг построения считается опциональным в смысле пользовательского интерфейса. Т.е. если шаг отмечен флагомOptionalStep
и он не содержит блоков аргументов, то для этого шага в пользовательском интерфейсе не будет сгенерировано страницы, на которой пользователь мог бы задать настройки. Вне зависимости от этого блоки-команды на этом шаге выполнены будут.
ForceNotLast (false/true)
Если значениеtrue
, то модуль построения отчета будет считать, что этот шаг построения отчета не последний. Свойство может быть полезно в случаях, когда новые шаги отчета генерируются по ходу выполнения предыдущих шагов.
Блоки-аргументы (блоки Arguments
)¶
Классы, наследованные от ArgumentBlockBase<T>
, опционально от IBlockInit
, опционально от IBlockValidate
, где T
- это тип фактического значения аргумента.
Блоки-аргументы содержаться в секции Arguments
листа StepN
и описывают одно поле ввода информации для кокретного шага отчета.
Каждый блок-аргумент имеет следующие свойства:
Name
Имя аргумента. Если не указано, то за имя принимается тип блока.
Caption
Заголовок, поля ввода, отображаемый хост-приложением.
Hint
Подсказка для поля ввода.
Visible
По умолчаниюtrue
. Еслиfalse
, то поле ввода не отображается.
LocalizationId
Идентификатор локализации.
LocalizationSection
Секция локализации.
Value
Значение поля ввода. В макете может быть задано значение по умолчанию. В отчет будет скопировано значение, фактически введенное в поле ввода.
TextBox
¶
Поле для ввода текста.
Свойства:
Value
Текст, введенный в поле ввода.
ComboBox
¶
Поле ввода типа выпадающего списка.
Свойства:
Items
Массив строк с элементами выпадающего списка.
AllowEmpty (false/true)
Определяет, разрешено ли оставлять поле ввода пустым.
Value
Индекс выбранного элемента в выпадающем списке (от нуля).
Value_ItemIndex [ValueIsAddress]
Индекс выбранного элемента в выпадающем списке (от нуля).
Value_ItemText [ValueIsAddress]
Текст выбранного элемента в выпадающем списке.
CheckBox
¶
Поле ввода типа "флажок" (чек-бокс).
Свойства:
Value (false/true)
true
если в поле ввода флажок поставлен, иначеfalse
.
CheckedList
¶
Поле ввода в виде списка флажков (чек-боксов).
Свойства:
Items
Массив из строк, представляющих элементы списка.
MultiSelect (false/true)
true
если в списке разрешено отмечать несколько позиций, иначеfalse
.
AllowEmpty
true
если разрешено оставить список без отметок.false
если нужно отметить хотя бы одну позицию, чтобы формирование отчета можно было продолжить.
Value
Массив индексов отмеченных позиций в списке (индексы от нуля). В макете в это свойство можно записать значение поля ввода по умолчанию (определить, какие позиции по умолчанию отмечены).
Value_SelectedItemsIndex [ValueIsAddress]
Сюда выводится массив индексов отмеченных позиций в списке (индексы от нуля).
Value_ItemsChecked [ValueIsAddress]
Сюда выводится массив типаbool
(значениеfalse/true
). В массиве будет по одному элементу на каждую позицию в списке. Элемент массив будет равенtrue
, если соответствующая позиция отмечена.
Value_SelectedItemsText [ValueIsAddress]
Сюда выводится массив, состоящий из элементовItems
, для которых был отмечен флажок.
Value_SelectedItemsMergedText [ValueIsAddress]
Сюда выводится строка, сформированная из текста всех отмеченных позиций через запятую. Это можно использовать для формирования значений типаenum
.
Value_SelectedItemsCount [ValueIsAddress]
Сюда выводится количество отмеченных позиций.
ListBox
¶
Поле ввода в виде списка текстовых строк, из которых пользователь может выбрать одну или несколько позиций.
Свойства:
Items
Массив из строк, представляющих элементы в списке.
Multiselect (false/true)
true
, если пользователю разрешено выбирать несколько позиций в списке.
Value
Значение поля. Массив из строк, сформированный из элементов списка, выбранных пользователем.
Timing
¶
Поле для ввода временного диапазона или одного момента времени и типа тайминга.
Доступные варианты таймингов, задаются в макете на специальном листе Timings
.
Свойства:
AutoFix
Еслиtrue
, то выполняется автоматическая коррекция времменного диапазона, введенного в поле ввода.
Коррекция выполняется по следующему алгоритму.
ЕслиT1
не задано, то туда записывается текущее локальное время, скорректированное по правилам тайминга.
ЕслиT2
не задано, то туда записываетсяT1 + Step * N
.
Value.TimingType
Выбранный тип тайминга.
Value.Step (D8TimeInterval)
Длина одного шага.
Value.N
Величина временного диапазона, выраженная в шагах, длина которых задается в свойствеValue.Step
.
Value.T1
Начало диапазона.
Value.T2
Конец диапазона.
ParamTable
¶
Поле ввода в виде таблицы параметров. Пользователь может добавлять в таблицу параметры Дельта и выбирать набор столбцов.
Свойства:
MinParamCount
Минимальное количество параметров, которое необходимо добавить в таблицу.
MaxParamCount
Максимальное количество параметров, которое можно добавить в таблицу.
MinFieldCount
Минимальное количество столбцов, которое необходимо выбрать в таблице.
MaxFieldCount
Максимальное количество столбцов, которое можно выбрать в таблице.
Value.ParamSids
Массив SID-идентификаторов параметров Дельта, которые пользователь добавил в таблицу.
Value.ParamDbFields
Массив названий полей НСИ, которые пользователь добавил в таблицу, выбрав в таблице отображаемые колонки.
DataTable
¶
Поле для передачи табличных данных их хост-приложения в отчет. Позволяет хост-приложению записать таблицу данных (ID8Table
) в переменную отчета.
Свойства:
DstVariable [ValueIsAddress]
Название переменной отчета, в которую должна быть сохранена таблица с данными. ЕслиDstVariable
не задано, то в качестве имени переменной используется имя этого поля ввода (Name
).
CustomControl
¶
Нестандартное поле ввода.
Свойства:
ControlType
Название типа, реализующего элемент управления. Экземпляр этого типа будет создан и использован в качестве поля ввода.
Value
Значение поля ввода произвольного типа (object
).
Блоки-команды (блоки Commands
)¶
Классы, наследованные от CommandBlockBase
.
Блоки-команды содержаться в секции Commands
листа StepN
и описывают действия, которые нужно выполнить на конкретном шаге построения отчета после ввода данных в блоки-аргументы.
Каждый блок-команда имеет следующие свойства:
DstAddress [ValueIsAddress]
Адрес региона ячеек или название переменной отчета, куда будет выведен результат команды.
Если значение свойства начинается с#
, то это название переменной отчета.
DstRangeOffset
Сдвиг в регионеDstAddress
в формате RC.
RecordSpan
Количество строк, которое занимает одна запись вертикальной таблицы (для горизонтальной таблицы - количество столбцов для горизонтальной таблицы).
RecordLength
Количество ячеек, занимаемых одной записью в таблице.
DstRangeSnap
Направление, в котором нужно сместить регион с результатами выполнения, чтобы удалить пустые строки/столбцы из отчета.
Возможные значения:Up
,Down
,Right
,Left
. По умолчанию - не задано (0).
DstRangeFormat
Флаги форматирования региона с результатами выполнения. Возможные значения:
Reshape
Подогнать форматирование регионаDstAddress
под фактический размер данных путем растягивания прямоугольной таблицы за ее правую нижнюю ячейку.
GrowInsert
Увеличить размер регионаDstAddress
под фактический размер данных путем копирования последней строки региона и ее вставки вниз вместе с форматированием.
AllowSingleRow
Разрешает сжимать регион до одной строки (или столбца).
Orientation
Ориентация данных (в рядах/в столбцах).
Возможные значения:Rows
,Columns
. По умолчанию -Rows
(0).
Header
Флаги, определяющие заголовки таблицы и записей в таблице.
По умолчанию - не задано (0).
Возможные значения:TableHeader
- выводить заголовок таблицыRecordHeader
- выводить заголовки записей в таблицеColumnFilter
- добавить фильтр excel по значения столбцов таблицыColumnAutosize
- автоподгон ширины столбцов таблицы
AutoBordersInside
Стиль границ, которые будут автоматически нарисованы внутри таблицы.
По умолчанию - не задано (0 - не рисовать).
Возможные значения:Hair
Dotted
DashDot
Thin
DashDotDot
Dashed
MediumDashDotDot
MediumDashed
MediumDashDot
Thick
Medium
Double
LocalizationId
Идентификатор локализации.
LocalizationSection
Секция локализации.
При выполнении блока-команды форматирование, которое можно задать с помощью свойств DstRangeSnap
, Header
, AutoBordersInside
и других не выполняется, если DstAddress
ссылается на регион на листе StepN
.
DrawTable
¶
Команда выводит таблицу на лист excel. Исходной таблицей может быть переменная отчета либо регион ячеек excel.
Свойства:
SrcAddress
String [ValueIsAddress]
Адрес исходных данных.
Если значение представляет собой строку, которая начинается на#
, то это исходный адрес - это переменная отчета, в которой содержится таблица данных (ID8Table
). В этом случае исходные данные - это содержимое этой таблицы.
Если значение - это ссылка на регион ячеек или адрес региона ячеек, то исходные данные берутся из этого региона.
SrcOrientation (Rows/Columns)
Ориентация исходных данных:Rows
- записи ориентированы в рядах (по умолчанию).Columns
- записи в строках.
BreakOnEmptyRow (false/true)
Еслиtrue
, то копирование исходных данных будет прекращено на первом обнаруженном пустом ряду данных.
RemoveFormula
¶
Команда удаляет формулы excel с указанного листа, предварительно выполняя формулы и заменяя их на значения.
Свойства:
Worksheets
Массив из имен листов excel.
Каждый элемент массива может содержать символы подстановки (wildcards).
ShowHideSheet
¶
Скрывает, отображает или удаляет один или множество листов excel.
Свойства:
Worksheets
Массив из имен листов excel.
Каждый элемент массива может содержать символы подстановки (wildcards).
State
Состояние, в которое нужно перевести листы excel:Visible
- лист отображается.Hidden
- лист скрывается.VeryHidden
- лист скрывается без возможности его отображения из excel.
Delete (false/true)
Еслиtrue
, то листы будут удалены вместо того, чтобы просто изменить их статус видимости.
RenameWorksheet
¶
Выполняет копирование содержимого одного или нескольких листов excel внутрь указанного листа.
Скопированные листы опционально удаляются.
Листы объединяются вертикально.
Свойства:
DestWorksheet
Имя листа, в который будут скопированы листыWorksheets
.
Worksheets
Массив из имен листов excel.
Каждый элемент массива может содержать символы подстановки (wildcards).
Delete
Еслиtrue
, то листы будут удалены после копирования.
AppendSheet
¶
Выполняет копирование содержимого одного или нескольких листов excel внутрь указанного листа. Листы объединяются вертикально.
Скопированные листы опционально удаляются.
Свойства:
DestWorksheet
Имя листа, в который будут скопированы листыWorksheets
.
Worksheets
Массив из имен листов excel.
Каждый элемент массива может содержать символы подстановки (wildcards).
Delete
Еслиtrue
, то листы будут удалены после копирования.
SqlQuery
¶
Команда выполняет SQL-запрос в базе данных указанного инстанса или произвольной БД.
Если используется инстанс, то авторизация выполняется в контексте хост-приложения.
Свойства:
Instance
Имя инстанса, чью базу данных нужно использовать для выполнения запроса.
Если не указано, то для подключения к БД будет использоваться строка подключенияConnectionString
.
InstanceDb
Часть инстансаInstance
:ParamDb
- база данных НСИ.Archive
- архивная БД.MetaDb
- мета-БД.
ConnectionString
Строка подключения к БД. Используется, если не задано свойствоInstance
.
Sql
Текст SQL-запроса.
ReadParamDb
¶
Команда выполняет поиск параметров Дельта и чтение полей НСИ.
В результат выполнения команды выводится таблица, набор столбцов которой задается свойством ParamDbFields
, а строки соответствуют найденным параметрам Дельта.
Если указано хотя бы одно свойство FindParamInstanceTypeRegex
, FindParamInstanceNameRegex
или FindParamInstanceQuery
, то поиск параметров выполняется с использованием этой группы свойств.
В этом случае инстансы находятся с помощью указанного регулярного выражения для типов инстансов и имен инстансов.
Опционально может быть указана строка запроса параметров, выполняемого в НСИ найденных инстансов.
Если ни одного свойств FindParamXxx
не задано, то поиск выполняется по SID-идентификаторам, заданных в свойствах ParamSids
и ParamSidsBase
.
Свойства:
ParamDbFields
Массив строк с именами полей НСИ, которые нужно вывести в результат выполнения команды.
Multiline (false/true)
Еслиtrue
, то все поля НСИ одного параметра записываются в результат выполнения команды в одну ячейку в виде многострочного текста.
ParamSids
Массив с SID-идентификаторами параметров, для которых нужно прочитать поля НСИ. Идентификаторы могут быть относительными. В этом случае абсолютные SID формируются с помощьюParamSidsBase
.
ParamSidsBase
Массив базовых SID-идентификаторов.
FindParamInstanceTypeRegex
Регулярное выражение для типов инстансов, которые включаются в поиск параметров.
FindParamInstanceNameRegex
Регулярное выражение для имен инстансов, которые включаются в поиск параметров.
FindParamInstanceQuery
Запрос к НСИ найденных инстансов. Если не указан, то используются все параметры каждого найденного инстанса.
GetInstanceList
¶
Выводит список доступных инстансов. Возвращает таблицу из единственного столбца с именем инстанса.Список инстансов может быть выведен в таблицу или переменную с адресом
DstAdress
и/или записано в регион с адресом Value
.В регион
Value
выводится массив из имен инстансов.В результирующую таблицу выводятся столбцы:
Index
- индекс строки (номер от нуля).InstanceId
- идентификатор инстанса.InstanceName
- имя инстанса.InstanceDisplayName
- отображаемое имя инстанса.
Свойства:
Value
Если задано, то означает адрес ячейки, по которому нужно вывести список инстансов.
InstanceTypeRegex
Регулярное выражение для поиска инстансов по названиям их типов. Если это свойство не задано, то в поиск включаются инстансы любых типов.
InstanceNameRegex
Регулярное выражение для поиска инстансов по их имени. Если это свойство не задано, то в поиск включаются инстансы с любым именем.
GetInstDevices
¶
Команда выполняет поиск устройств в НСИ инстансов с помощью регулярных выражений для типов и имен инстансов и имен приборов.
В результирующую таблицу выводятся столбцы:Index
- индекс строки (номер от нуля).InstanceId
- идентификатор инстанса.InstanceName
- имя инстанса.InstanceDisplayName
- отображаемое имя инстанса.Id
- идентификатор прибора.Name
- имя прибора.
Свойства:
InstanceTypeRegex
Регулярное выражение для поиска инстансов по названиям их типов. Если это свойство не задано, то в поиск включаются инстансы любых типов.
InstanceNameRegex
Регулярное выражение для поиска инстансов по их имени. Если это свойство не задано, то в поиск включаются инстансы с любым именем.
NameRegex
Регулярное выражение для поиск приборов в НСИ по их наименованиям. Если это свойство не задано, то возвращаются все приборы для каждого найденного инстанса.
GetInstGroups
¶
Команда выполняет поиск групп параметров в НСИ инстансов с помощью регулярных выражений для типов и имен инстансов и наименований групп параметров в НСИ.
В результирующую таблицу выводятся столбцы:Index
- индекс строки (номер от нуля).InstanceId
- идентификатор инстанса.InstanceName
- имя инстанса.InstanceDisplayName
- отображаемое имя инстанса.Id
- идентификатор группы.Name
- имя группы.
Свойства:
InstanceTypeRegex
Регулярное выражение для поиска инстансов по названиям их типов. Если это свойство не задано, то в поиск включаются инстансы любых типов.
InstanceNameRegex
Регулярное выражение для поиска инстансов по их имени. Если это свойство не задано, то в поиск включаются инстансы с любым именем.
NameRegex
Регулярное выражение для поиск групп параметров в НСИ по их наименованиям. Если это свойство не задано, то возвращаются все групп параметров для каждого найденного инстанса.
ReadArchive
¶
Команда чтения архивных значений параметров Дельта.
Заменена командой ReadArchive2
.
Свойства:
Start
Начальный момент времени диапазона запрашиваемых архивных значений.
Stop
Конечный момент времени диапазона запрашиваемых архивных значений.
Timezone
Часовой пояс, в который нужно переводить метки времени.
GroupBy
Способ группировки результирующих данных.Time
- по времени.Param
- по параметру.ParamBase
- по базовым SID-идентификаторам.ParamBaseAndTime
- по базовым SID-идентификаторам и времени.
DataFields
Поля значений, выводимые в результат:Moment
- запрошенный момент времени.MomentOA
- запрошенный момент времени в виде числа (OA Date).SID
- идентификатор SID параметра Дельта.Timestamp
- метка времени значения.TimestampOA
- метка времени значения в виде числа (OA Date).Value
- значение в виде числа.ValueString
- значение в виде строки.ValueAuto
- значение с автоматическим определением нужного формат (строка/число).State
- состояние значения (в виде числа).StateString
- состояние значения (в виде строки).StateHex
- состояние значения (в виде строки с шестнадцатеричным представлением).XState
- расширенное состояние значения.Quality
- качество значения.RowNumber
- порядковый номер строки.
ParamSids
SID-идентификаторы параметров, чьи значения нужно прочитать из архива.
Bounds
Нужно ли считывать граничные точки:None
- не задано (по умолчанию, равносильноNoBounds
).NoBounds
- не нужно.LeftRight
- нужно найти левую и правую границы.
Coef
Коэффициент, на который будут помножены прочитанные значения.
Step (D8TimeIntervalLong)
Шаг по времени, с которым нужно вычитывать значения из архива.
StopInclusive (false/true)
Еслиtrue
, то значение с меткой времениStop
включается в выборку.
Aggregate (D8Aggregate)
Метод агрегирования данных внутри каждого шагаStep
.
Interpolation (D8Interpolation)
Способ интерполяции значений.
Aggregate2 (D8Aggregate)
Дополнительная обработка данных после агрегирования с методомAggregate
.
ReadArchiveProc
¶
Команда чтения архивных значений параметров Дельта и их обработки с помощью D8DataProcessor
.
Заменена командой ReadArchive2
.
Свойства:
Start
Начальный момент времени диапазона запрашиваемых архивных значений.
Stop
Конечный момент времени диапазона запрашиваемых архивных значений.
Timezone
Часовой пояс, в который нужно переводить метки времени.
GroupBy
Способ группировки результирующих данных.Time
- по времени.Param
- по параметру.ParamBase
- по базовым SID-идентификаторам.ParamBaseAndTime
- по базовым SID-идентификаторам и времени.
DataFields
Поля значений, выводимые в результат:Moment
- запрошенный момент времени.MomentOA
- запрошенный момент времени в виде числа (OA Date).SID
- идентификатор SID параметра Дельта.Timestamp
- метка времени значения.TimestampOA
- метка времени значения в виде числа (OA Date).Value
- значение в виде числа.ValueString
- значение в виде строки.ValueAuto
- значение с автоматическим определением нужного формат (строка/число).State
- состояние значения (в виде числа).StateString
- состояние значения (в виде строки).StateHex
- состояние значения (в виде строки с шестнадцатеричным представлением).XState
- расширенное состояние значения.Quality
- качество значения.RowNumber
- порядковый номер строки.
ParamSids
SID-идентификаторы параметров, чьи значения нужно прочитать из архива.
ParamSidsBase
Базовые SID-идентификаторы. Если указаны, то массивParamSids
содержит относительные SID, разрешаемые относительноParamSidsBase
.
Request.Xxx
Настройки запросов на чтение и обработку данных. Каждое свойствоRequest.Xxx
- это массив, длина которого равна количеству параметровParamSids
. Элемент N в любом массивеRequest.Xxx
относится к параметру N в массивеParamSids
. Если в массивеRequest.Xxx
задано элементов меньше, чем вParamSids
, то последний элемент повторяется до нужной длины массива. Если не задано ни одного элемента, то используются значения по умолчанию.
Request.ParamAlias
Псевдоним параметра. Используется как идентификатор в результирующем массиве данных.
Request.Substitution (false/true)
Еслиtrue
, то этот параметр используется как подстановочное значение для предыдущего параметра в случае неудовлетворительного качества данных.
Может быть задано несколько таких подстановочных параметров подряд для одного параметра.
Request.QualityThreshold
Минимальное качество данных (от 0 до 1), которое считается удовлетворительным.
Request.CombineResultsByQuality (false/true)
Еслиtrue
, то результирующие данные для одного параметра и подстановочных параметров будут обработаны построчно. Для каждой строки в результат будет включено значение с максимальным качеством.
Еслиfalse
, то результирующие выборки не комбинируются. Вместо этого выбирается выборка целиком с максимальным показателем качества.
Request.StartTimeShift
Сдвиг начального времениStart
для этого параметра.
Request.StopTimeShift
Сдвиг конечного времениStop
для этого параметра.
Request.StopInclusive (false/true)
Еслиtrue
, то значение с меткой времени равной концу запрашиваемого временного диапазона включается в выборку.
Request.QosInterval
Интервал времени, используемый для оценки качества обработанных данных.
Request.RawDataInterval
Интервал необработанных данных.
Request.ReadSkipStateFilter
Маска флагов состояния значений параметра, исключаемых из выборки исходных данных.
Request.ReadIncludeStateFilter
Маска флагов состояния значений параметра, которые должны присутствовать в состоянии значения, чтобы оно было включено в выборку.
Request.ReadMethod (D8DataProcReadOperation)
Метод чтения данных. Если не указан, то определяется автоматически.ReadRaw
ReadAtTime
ReadRawMany
ReadAtTimeMany
ReadRawEachMoment
ReadRawFromDataset
Request.ReadStep
Шаг чтения архивных значений.
Request.ReadBounds (false/true)
Еслиtrue
при чтении архивных значений используется поиск граничных точек.
Request.ReadOptions (ReadFlags)
Настройки операции чтения архива.NoValues
BoundsForEachMoment
SuggestBulkRead
CacheOnly
FillUnknownValues
Request.ReadInterpolation (D8Interpolation)
Способ интерполяции необработанных архивных данных.None
Step
Line
LastValue
Request.RawDataTimeShift
Величина, на которую будут сдвинуты метки времени прочитанных значений.
Request.ProcessingStep
Шаг обработки, на который сдвигается время для получения начала очередного интервала для обработки данных.
Request.ProcessingSpan
Длина интервал, на котором выполняется обработка.
Request.ProcessingAggregate (D8Aggregate)
Способ обработки данных.
Request.ProcessingInterpolation (D8Interpolation)
Интерполяция, используемая для обработки данных.
Request.ProcessedDataInterval
Интервал значений, которые получаются после обработки данных.
Request.AuxProcessingStateFilter
Шаг дополнительной обработки.
Request.AuxProcessingStep
Интервал дополнительной обработки.
Request.AuxProcessingSpan
Способ дополнительной обработки.
Request.AuxProcessingAggregate (D8Aggregate)
Способ дополнительной обработки.
Request.AuxProcessingInterpolation (D8Interpolation)
Интерполяция дополнительной обработки.
Request.AuxProcessedDataInterval
Интервал значений, которые получаются после дополнительной обработки данных.
Request.CoefK
Коэффициент, на который будут помножены результирующие значения.
Request.CoefC
Коэффициент, который будет прибавлен к результирующим значениям.
ReadArchive2
¶
Команда чтения архивных значений параметров Дельта и их обработки с помощью D8DataProcessor
. Расширенная версия команды ReadArchiveProc
.
Позволяет формировать произвольный набор столбцов в результирующих данных, а не только задавать столбцы с помощью ArchiveDataFields
.
Позволяет определять параметры Дельта, не только по SID, но и с помощью строки запроса к НСИ инстнасов.
Если указано хотя бы одно свойство FindParamInstanceTypeRegex
, FindParamInstanceNameRegex
или FindParamInstanceQuery
, то поиск параметров выполняется с использованием этой группы свойств. В этом случае инстансы находятся инстансы находятся с помощью указанного регулярного выражения для типов инстансов и имен инстансов. Опционально может быть указана строка запроса параметров, выполняемого в НСИ найденных инстансов.
Если ни одного свойств FindParamXxx
не задано, то поиск выполняется по SID-идентификаторам, заданных в свойствах ParamSids
и ParamSidsBase
.
Содержит все свойства команды ReadArchiveProc
и дополнительные свойства:
FindParamInstanceTypeRegex
Регулярное выражение для поиска инстансов по названиям их типов. Если это свойство не задано, то в поиск включаются инстансы любых типов.
FindParamInstanceNameRegex
Регулярное выражение для поиска инстансов по их имени. Если это свойство не задано, то в поиск включаются инстансы с любым именем.
FindParamInstanceQuery
Запрос к НСИ найденных инстансов. Если не указан, то используются все параметры каждого найденного инстанса.
Column.Xxx
Содержат определения столбцов результирующей таблицы.
Если задан массивColumn.Definition
, то именно он определяет набор столбцов в результирующей таблице. Иначе для этого используется свойствоArchiveDataFields
.
Column.Name
Имя столбца. Если не задано, то генерируется автоматически.
Column.Caption
Заголовок столбца. Если не задан, то определяется автоматически по строке определенияColumn.Definition
.
Column.Definition
Строка определения столбца. См. [ Строка определения столбца ]
TimestampInHeader (false/true)
Еслиtrue
, то нужно вывести метки времени в заголовок результирующей таблицы.
ReadArchiveRecords
¶
Команда выборки записей record-параметров из архива.
Содержит команды:
ParamSid
Идентификатор record-параметра или мета-типа, записи которого нужно выбрать их архива, с указанием имени инстанса.
Например:TEST_INST.#TypeShortName
илиTEST_INST.123#MyType
.
SelectFields
Список названий свойств мета-типа, которые должны попасть в результ выборки. Если не указан, то запрашиваются все свойства.
SelectCondiotion.Xxx
Настройки фильтрации и сортировки выборки.
SelectCondiotion.Field
Название свойства, на котором выполняется условие или по которому выполняется сортировка.
SelectCondiotion.Type
Тип обработки (условие или направление сортировки). Варианты значения:Equal
NotEqual
In
NotIn
Less
LessOrEqual
Greater
GreaterOrEqual
GreaterAndLess
GreaterAndLessOrEqual
GreaterOrEqualAndLess
GreaterOrEqualAndLessOrEqual
NotGreaterAndLess
NotGreaterAndLessOrEqual
NotGreaterOrEqualAndLess
NotGreaterOrEqualAndLessOrEqual
Like
NotLike
Flags
NotFlags
IsNull
NotIsNull
OrGroup
NotOrGroup
AndGroup
NotAndGroup
Top
OrderAsc
OrderDesc
SelectCondiotion.Argument
Аргумент условия.
Column.Xxx
Содержат определения столбцов результирующей таблицы.
Если задан массивColumn.Definition
, то именно он определяет набор столбцов в результирующей таблице. Иначе для этого используется свойствоArchiveDataFields
.
Column.Name
Имя столбца. Если не задано, то генерируется автоматически.
Column.Caption
Заголовок столбца. Если не задан, то определяется автоматически по строке определенияColumn.Definition
.
Column.Definition
Строка определения столбца.
RunScript
¶
Команда для запуска скрипта на C# или выполнения метода указанного типа .NET.
References
Зависимости для выполнения скрипта. Массив из строк с именами файлов сборок, которые необходимо загрузить для выполнения скрипта.
Module
Модуль, содержащий код, который нужно выполнить.
Если оканчивается на".dll"
, то будет загружена сбора с именемModule
и внутри нее будет выполнен поиск и выполнение необходимого методаMethod
.
Если оканчивается на".cs"
, то будет загружен файл с кодом на C# из файла с именемModule
, файл будет скомпилирован и внутри полученной сборки будет выполнен поиск и выполнение необходимого методаMethod
.
В остальных случаяхMethod
- это название листа excel, текст на котором будет объеденен и использован как код на C#. Этот код будет скомпилирован и внутри полученной сборки будет выполнен поиск и выполнение необходимого методаMethod
.
Method
Полное имя метода типа C#, который нужно выполнить. Метод должен быть публичным и статическим. ЧастьMethod
до последней точки интерпретируется как имя типа, остальное - имя метода.
RunFormula
¶
Команды для выполнения скриптов на языке FL.
Для каждой ячейки Excel в регионе, указанном в SrcAddress
, последовательно слева напрво и сверху вних, выолняется формула FL, записанная в этой ячейке. Все переменные, сформированные за время выполнения формулы в первой ячейке, переносятся в контекст выполнения формулы в следующей ячейке. Если формула не заканчивается точкой с запятой, то результат выполнения последнего выражения в формуле помещается на ячейку Excel, правее ячейки с формулой.
XR_GET
- получение значения из документа Excel с отчетом;XR_SET
- запись значения в документ Excel.
SrcAddress
, результаты выполнения (переменные, полученные в результате выполнения) могут быть записаны в ячейки Excel на листах, перечисленных в OutputWorksheets
. Для каждой ячейки на каждом листе OutputWorksheets
выполняется обработка:
- если формула ячейки имеет вид
"|formula"
, то выполняется формула с текстомformula
, а результат записывыается в ячейку; - если комментарий ячейки имеет вид
|formula
, то выполняется формула с текстомformula
, а результат записывыается в комментарий ячейки.
Свойства команды:
SrcAddress
Регион ячеек, содержащий формулы FL.
Timezone
Локальный часовой пояс.
CtxStart
Начало времени для контекста выполнения формул. Задает начало временного интервала интересующих данных для функций формулы, где явно не указано начало времени. По умолчанию не задано.
CtxStop
Конец времени для контекста выполнения формул. Задает конец временного интервала интересующих данных для функций формулы, где явно не указан конец времени. По умолчанию не задано.
CtxStep
Шаг чтения или обработки данных для контекста выполнения формул. Задает шаг для функций формулы, где он не указан явно. По умолчанию -##total
.
CtxInterval
Интервал обработки данных для контекста выполнения формул. Задает интервал для функций формулы, где он не указан явно. По умолчанию -##total
.
OutputWorksheets
Массив строк с названиями листов, в которые нужно поместить результат работы.
GenerateSheet
¶
Команда используется для генерации шагов отчета во время построения отчета.
Свойства:
CycleData
Массив, элементам которого будет выполнен цикл. Операция генерации страницы отчета будет выполнена для каждого элемента в этом массиве.
CycleDataVar [ValueIsAddress]
Адрес ячейки, в которую будет копироваться очередной элемент из массиваCycleData
перед выполнением очередной итерации цикла.
Можно не указывать, если эта функциия не требуется.
CycleIndexVar [ValueIsAddress]
Адрес ячейки, в которую будет записываться номер (от нуля) итерации цикла перед выполнением очередной итерации цикла.
Можно не указывать, если эта функциия не требуется.
SetValue
Подстановочные значения.
Содержит два массива. В первом - адреса ячеек, в которые нужно вписать подстановочные значения. Во втором - адреса ячеек, из которых нужно прочитать подстановочные значения.
Можно не указывать, если эта функциия не требуется.
SetValue.Addr
Адрес ячейки, в которую нужно записать подстановочное значение.
По умолчанию используется адрес ячейки справа от ячейки с названием этого свойства.
SetValue.Value
Адрес ячейки, из которой нужно прочитать подстановочное значение.
По умолчанию используется адрес ячейки справа от ячейки с названием этого свойства.
SetFormula
Подстановочные формулы.
Содержит два массива. В первом - адреса ячеек, в которые нужно вписать подстановочные формулы. Во втором - адреса ячеек, из которых нужно прочитать подстановочные формулы.
Можно не указывать, если эта функциия не требуется.
SetFormula.Addr
Адрес ячейки, в которую нужно записать подстановочную формулу.
По умолчанию используется адрес ячейки справа от ячейки с названием этого свойства.
SetFormula.Value
Адрес ячейки, из которой нужно прочитать подстановочную формулу.
По умолчанию используется адрес ячейки справа от ячейки с названием этого свойства.
CycleStepWorksheet
Имя листа, содержащего шаг отчета, который будет выполнен на каждой итерации цикла.
Можно не указывать, если эта функциия не требуется.
TemplateWorksheetList
Массив с именами листов шаблона, которые будут использоваться в качестве шаблонов.
На каждой итерации цикла будут создаваться копии этих листов.
Должно быть указано обязательно.
WorksheetNameList [ValueIsAddress | UseCurrentCellAddress]
Адрес региона ячеек, содержащего массив с именами, которые будут даны копиям листов, указанных вTemplateWorksheetList
, в завершении очередной итерации цикла.
По умолчанию используется адрес ячейки справа от ячейки с названием этого свойства.
Можно не указывать, если эта функциия не требуется.
Свойства блоков¶
- Скалярное значение содержится в одной ячейке.
- Значение-массив содержится в горизонтальном регионе ячеек и ограничивается справа пустой ячейкой.
- Пустые строки равносильны тому, что значения нет (
null
).
- Если при чтении значения свойства из отчета в код оказывается, что ячейка содержит формулу, то эта формула будет выполнена.
- Если при чтении значения свойства из отчета в код оказывается, что ячейка содержит ссылку на другую ячейку (формулу вида
=A1
), то значение будет прочитано по ссылке.
- Если свойство отмечено атрибутом
D8BlockProperty(ValueIsAddress)
, то считается, что соответствующая ячейка отчета содержит адрес региона в виде формулы или текстового значения ячейки, либо название переменной отчета.
- Если свойство отмечено атрибутом
D8BlockProperty(ValueIsFormula)
, то считается, что значением для него будет формула соответствующей ячейки или текстовое значение этой ячейки.
- Если свойство отмечено атрибутом
D8BlockProperty(OutputToWorksheet)
, то его значение будет скопировано из кода в соответствующую ячейку отчета.
- Если свойство отмечено атрибутом
D8BlockProperty(OutputToVariable)
, то его значение будет скопировано в указанную переменную отчета.
- Если свойство называется
Value
, то его значение будет скопировано из кода в соответствующую ячейку отчета.
- При попытке сконвертировать значение-массив в тип
Enum
все элементы массива конвертируются в строки, склеиваются через запятую в одну строку и далее конвертируются с помощьюEnum.Parse
.
Последовательность обработки блоков¶
- При выполнение хост приложением метода
ID8Report.PrepareReport
для первого блокаSettings
листаReport
выполняется копирование значений свойств блока из отчета в код и вызовIBlockInit.Initialize
. Копируются значения всех свойств, для которых в коде определен сеттер.
- Реализация
IBlockInit.Initialize
класса блока может выполнить необходимые действия и подготовить выходные данные этого блока или записать что-то в отчет.
- Затем значения свойств обрабатываемого блока копируются из кода в отчет. Копируются значения всех свойств, отмеченных в коде атрибутом
D8BlockProperty(OutputToWorksheet)
и для которых определен геттер.
- Обработка повторяется для каждого блока
Settings
листаReport
.
- При выполнении хост приложением метода
ID8Report.PrepareStep
для блоковSettings
листаStep1
выполняется обработка блокаSettings
листаStep1
точно так же, как это было сделано для листаReport
.
- [продолжается выполнение
ID8Report.PrepareStep
] Далее для каждого блокаArguments
листаStep1
выполняется копирование значений свойств блока из отчета в код и вызовIBlockInit.Initialize
. Копируются значения всех свойств, для которых в коде определен сеттер.
- Далее хост-приложение отображает форму с полями ввода полученными как результат выполнения
ID8Report.PrepareStep
, ожидает от пользователя заполнения полей и передает заполненные поля плагину в методеID8Report.PerformStep
.
- При выполнении хост приложением метода
ID8Report.ValidateStep
для каждого блокаArguments
листаStep1
выполняется методIBlockValidate.Validate
. При этом проверяется корректность введенных данных и каике-то данные могут быть выведены в отчет.
- При выполнении хост приложением метода
ID8Report.PerformStep
значения свойств каждого блокаArguments
листаStep1
копируются из кода в отчет. Копируются значения всех свойств, отмеченных в коде атрибутомD8BlockProperty(OutputToWorksheet)
и для которых определен геттер.
- [продолжается выполнение
ID8Report.PerformStep
] Далее для первого блокаCommand
листаStep1
выполняется копирование значений свойств блока из отчета в код. Копируются значения всех свойств, для которых в коде определен сеттер.
- [продолжается выполнение
ID8Report.PerformStep
] Для обрабатываемого блока выполняется методCommandBlockBase.Execute
. При этом выполняются необходимые действия, для которых предназначен данный блок-команда. Результат выполнения команды может быть записан в отчет.
- [продолжается выполнение
ID8Report.PerformStep
] Обрабатываются все остальные блокиCommand
листаStep1
.
- На этом выполнение первого шага отчета закончено. При наличии других шагов повторяются пункты с 5 по 12 для листов
Step2
,Step3
и т.д.
Проблемы¶
Из-за ошибок в EPPlus сгенерированный отчет при определенных обстоятельствах оказывается поврежден. Excel при попытке открыть такой отчет предлагает восстановить документ и успешно его восстанавливает.
Замечено, что проблема проявляется:
- Когда в отчет выводится
double.NaN
.
Возможность этого была устранена на уровне кода, но повторение проблемы вероятно.
- Бывает, что простая excel-формула типа
=$C$13
после открытия документа с макетом отчета через EPPlus и его сохранения в построенный отчет вызывает ошибку. В таком случае достаточно очистить значение ячейки в макете и заполнить его заново.
Если при попытки форматирования региона ячеек с помощью GrowInsert
происходит исключение с текстом, что "значение не может быт меньше 1", то нужно создать в макете новый лист, скопировать туда содержимое проблемного листа, старый лист удалить, новый переименовать как старый. Пример исключения:
Csit.Delta.Client.ExcelReports.D8ExcelReportException: Ошибка при выполнении команды DrawTable. ---> System.ArgumentOutOfRangeException: Row cannot be less than 1. Parameter name: value at OfficeOpenXml.ExcelCellAddress.set_Row(Int32 value) at OfficeOpenXml.ExcelNamedRangeCollection.InsertRows(Int32 rowFrom, Int32 rows, ExcelNamedRange namedRange) at OfficeOpenXml.ExcelNamedRangeCollection.Insert(Int32 rowFrom, Int32 colFrom, Int32 rows, Int32 cols, Func`2 filter) at OfficeOpenXml.ExcelWorksheet.InsertRow(Int32 rowFrom, Int32 rows, Int32 copyStylesFromRow) at Csit.Delta.Client.ExcelReports.CommandBlockBase.PrepareGrowDstRangeWithInsert() at Csit.Delta.Client.ExcelReports.CommandBlockBase.Execute(ExecutionContext context) at Csit.Delta.Client.ExcelReports.D8ExcelReport.InternalDoStep(ExecutionContext stepContext) --- End of inner exception stack trace --- at Csit.Delta.Client.ExcelReports.D8ExcelReport.InternalDoStep(ExecutionContext stepContext) at Csit.Delta.Client.ExcelReports.D8ExcelReport.PerformStep(D8ReportStep step) at Csit.Delta.Monitor.Library.Controls.ReportDialog.TransitProc(Object pState)
Если после построения отчета пустые ячейки оказываются закрашены в розовый, то нужно в макете выбрать весь лист (клик в левой верхней угловой ячейке листа) и установить заливка "Без заливки". Далее восстановить заливку внутри листа.
История версий¶
1.0.21.0811
- Добавлена команда
AppendSheet
.
- Добавлена команда
1.0.21.0722
- Добавлена возможность загрузки шаблона отчета из указанного произвольного потока.
1.0.19.1030
- Выделение из интерфейса ID8ConnectionMng методов работы с базами данных в интерфейс ID8DbConnectionMng
1.0.19.1002
- Добавлена локализация сообщений валидации полей отчета.
1.0.19.0926
- Добавлена команда выборки записей record-параметров
ReadArchiveRecords
.
- Добавлена команда выборки записей record-параметров
1.0.19.0624
- Улучшена обработка
DstRangeOffset
.
- Улучшена обработка
1.0.19.0610
- Добавлена настройка
Timezone_UtcBias
.
- Добавлена настройка
1.0.19.0123
- Исправлена ошибка, которая приводила к зацикливанию при попытки использования метода
GrowInsert
на пустом листе.
- Исправлена ошибка, которая приводила к зацикливанию при попытки использования метода
1.0.18.0828
- Добавлена возможность настройки контекста выполнения формул для команды
RunFormula
.
- Добавлена возможность настройки контекста выполнения формул для команды
1.0.18.0130
- Исправлена ошибка в обработке относительных SID.
1.0.18.0130
- Добавлена поддержка настроек выполнения скриптов FL.
1.0.18.0125
- Оптимизировано форматирование листов excel с помощью вставки строк (
GrowInsert
).
- Оптимизировано форматирование листов excel с помощью вставки строк (
1.0.18.0119
- Добавлена FL-функция
XR_SET
для вывода данных из FL-скрипта в отчет.
- Добавлена FL-функция
1.0.17.1219
- Добавлена функция создания параметров Дельта для SID, содержащих специальный разделитель.
1.0.17.1218
- Теперь классы блоков отчета загружаются из текущей сборки.
- Возвращены ранее удаленные свойства
Request.ProcessingStateFilter
иRequest.AuxProcessingStateFilter
команд чтения данных из соображений совместимости.
1.0.17.1204
- Исправлена ошибка, которая возникала при удалении формул в команде
RemoveFormula
при обработке объединенных ячеек. - Для
RemoveFormula
теперь можно указать массив в качестве значенияSheet
. - Добавлена команда
RunFormula
.
- Исправлена ошибка, которая возникала при удалении формул в команде
1.0.17.1116
- В команду
GetInstanceList
добавлена поддержка фильтрации инстансов.
- В команду
1.0.17.1026
- Исправлена ошибка, которая приводила к исключению при обработки команды
ReadArchive
при чтении необработанных данных за интервал с группировкой по времени. Ошибка проявлялась, если в списке запрашиваемых параметров были параметры с несуществующими сидами.
- Исправлена ошибка, которая приводила к исключению при обработки команды
1.0.17.1004
- Добавлены команды
GetInstDevices
иGetInstGroups
для получения таблицы устройств и групп из всех инстансов. - Добавлена возможность указывать строковые SID параметров относительно базовой строки.
- Для команд
ReadArchive2
иReadParamDb
добавлена возможность поиска параметров с помощью строки запроса.
- Добавлены команды
1.0.17.0322
- Добавлен флаг
AllowSingleRow
для свойства командыDstRangeFormat
.
- Добавлен флаг
1.0.17.0209
- Исправлена ошибка, приводившая к скрыванию результатов команды
ReadArchive
для случая ее использования без указания списка параметров.
- Исправлена ошибка, приводившая к скрыванию результатов команды
1.0.16.1202
- Команда удаления формул теперь поддерживает wildcards.
1.0.16.715
- Добавлена поддержка вывода результатов в таблицу (а не только в xlsx).
- Добавлена новая версия команды выборки данных -
ReadArchive2
.
1.0.16.0314
- Теперь макеты отчетов могут лежать в подпапках с именем, равным
LocalizationId
. Если нужный макет не будет найден в такой папке, то используется путь безLocalizationId
.
- Теперь макеты отчетов могут лежать в подпапках с именем, равным
1.0.15.1203
- Для команды
ReadArchive
исправлена ошибка чтения черезReadAtTime
. - Добавлена возможность игнорирования ошибок поиска параметров.
- Для команды
1.0.15.1008
- Для команды
ReadArchive
добавлена обработка исключений интерфейса работы с архивом и вывод этих исключений в сводку построения отчета.
- Для команды